// 管理员确认对话框工具
// 用于出库确认页面返回按钮的管理员身份验证

import { adminConfirmCleanup, getScanRecords } from '@/utils/cacheManager'

/**
 * 显示管理员确认对话框
 * @param {Object} options 配置选项
 * @returns {Promise} 确认结果
 */
export function showAdminConfirmDialog(options = {}) {
  return new Promise((resolve) => {
    const {
      title = '管理员确认',
      message = '返回到程序选择画面将清除当前扫码记录，请输入管理员密码确认',
      includeScanRecords = true
    } = options

    // 获取当前扫码记录数量
    const scanRecords = getScanRecords()
    const scanRecordCount = scanRecords.length

    let dialogMessage = message
    if (scanRecordCount > 0) {
      dialogMessage += `\n\n⚠️ 当前有 ${scanRecordCount} 条扫码记录将被清除`
    }

    // 显示管理员密码输入对话框
    uni.showModal({
      title: title,
      content: dialogMessage,
      editable: true,
      placeholderText: '请输入管理员密码',
      success: (modalRes) => {
        if (modalRes.confirm) {
          const adminPassword = modalRes.content

          if (!adminPassword) {
            uni.showToast({
              title: '请输入管理员密码',
              icon: 'none',
              duration: 2000
            })
            resolve({
              confirmed: false,
              error: '密码不能为空'
            })
            return
          }

          // 这里应该调用后端API验证管理员密码
          // 简化示例，直接使用本地验证
          validateAdminPassword(adminPassword)
            .then((isValid) => {
              if (isValid) {
                // 密码正确，执行清理
                const cleanupResult = adminConfirmCleanup(adminPassword, includeScanRecords)
                
                if (cleanupResult.success) {
                  uni.showToast({
                    title: `已清理 ${cleanupResult.removedCount} 项缓存`,
                    icon: 'success',
                    duration: 2000
                  })
                  
                  resolve({
                    confirmed: true,
                    cleanupResult: cleanupResult
                  })
                } else {
                  uni.showToast({
                    title: '清理缓存失败',
                    icon: 'none',
                    duration: 2000
                  })
                  
                  resolve({
                    confirmed: false,
                    error: '清理失败: ' + cleanupResult.error
                  })
                }
              } else {
                uni.showToast({
                  title: '管理员密码错误',
                  icon: 'none',
                  duration: 2000
                })
                
                resolve({
                  confirmed: false,
                  error: '密码错误'
                })
              }
            })
            .catch((error) => {
              uni.showToast({
                title: '密码验证失败',
                icon: 'none',
                duration: 2000
              })
              
              resolve({
                confirmed: false,
                error: '验证失败: ' + error.message
              })
            })
            
        } else {
          // 用户取消
          resolve({
            confirmed: false,
            error: '用户取消操作'
          })
        }
      },
      fail: () => {
        resolve({
          confirmed: false,
          error: '对话框显示失败'
        })
      }
    })
  })
}

/**
 * 验证管理员密码
 * @param {string} password 密码
 * @returns {Promise<boolean>} 是否有效
 */
async function validateAdminPassword(password) {
  try {
    // 方法1: 调用后端API验证（推荐）
    // const response = await post('/api/admin/validatePassword', { password })
    // return response.data.code === '00000'
    
    // 方法2: 本地简单验证（仅用于演示）
    // 实际项目中应该使用后端验证
    const validPasswords = ['admin123', 'manager456', 'supervisor789']
    return validPasswords.includes(password)
    
  } catch (error) {
    console.error('管理员密码验证失败:', error)
    return false
  }
}

/**
 * 出库确认页面返回按钮处理函数
 * 使用示例
 */
export async function handleDeliveryConfirmBack() {
  try {
    console.log('🔄 出库确认页面返回按钮被点击')
    
    // 检查是否有扫码记录需要清理
    const scanRecords = getScanRecords()
    
    if (scanRecords.length === 0) {
      // 没有扫码记录，直接返回
      console.log('✅ 没有扫码记录，直接返回')
      uni.reLaunch({
        url: '/pages/select/select'
      })
      return
    }
    
    // 有扫码记录，需要管理员确认
    console.log(`📋 检测到${scanRecords.length}条扫码记录，需要管理员确认`)
    
    const confirmResult = await showAdminConfirmDialog({
      title: '确认返回程序选择画面',
      message: '返回程序选择画面将清除所有工作数据',
      includeScanRecords: true
    })
    
    if (confirmResult.confirmed) {
      console.log('✅ 管理员确认成功，清理完成，返回选择画面')
      
      // 延迟跳转，确保用户看到成功提示
      setTimeout(() => {
        uni.reLaunch({
          url: '/pages/select/select'
        })
      }, 1500)
    } else {
      console.log('❌ 管理员确认失败或用户取消:', confirmResult.error)
      // 不执行返回操作，用户继续在当前页面
    }
    
  } catch (error) {
    console.error('❌ 出库确认返回处理失败:', error)
    uni.showToast({
      title: '操作失败',
      icon: 'none',
      duration: 2000
    })
  }
}

/**
 * 检查扫码记录状态
 * @returns {Object} 扫码记录状态信息
 */
export function checkScanRecordStatus() {
  try {
    const scanRecords = getScanRecords()
    const status = {
      hasRecords: scanRecords.length > 0,
      recordCount: scanRecords.length,
      lastScanTime: null,
      successCount: 0,
      failureCount: 0
    }
    
    if (scanRecords.length > 0) {
      // 分析扫码记录
      status.successCount = scanRecords.filter(record => record.status === 'success').length
      status.failureCount = scanRecords.filter(record => record.status === 'failed').length
      
      // 找到最后扫码时间
      const sortedRecords = scanRecords.sort((a, b) => new Date(b.scanTime) - new Date(a.scanTime))
      status.lastScanTime = sortedRecords[0].scanTime
    }
    
    console.log('📊 扫码记录状态:', status)
    return status
    
  } catch (error) {
    console.error('❌ 检查扫码记录状态失败:', error)
    return {
      hasRecords: false,
      recordCount: 0,
      lastScanTime: null,
      successCount: 0,
      failureCount: 0,
      error: error.message
    }
  }
}

/**
 * 为delivery-confirm页面提供的返回按钮组件逻辑
 */
export const deliveryConfirmBackMixin = {
  methods: {
    async onBackButtonClick() {
      await handleDeliveryConfirmBack()
    },
    
    checkCanDirectReturn() {
      const status = checkScanRecordStatus()
      return !status.hasRecords
    },
    
    getScanRecordSummary() {
      const status = checkScanRecordStatus()
      if (!status.hasRecords) {
        return '无扫码记录'
      }
      return `${status.recordCount}条记录 (成功:${status.successCount}, 失败:${status.failureCount})`
    }
  }
}